namespace NBidi {
	public class BidiCharacterTypeResolver {
		public static BidiCharacterType GetBidiCharacterType(char c) {
			if ((c >= '\u0000' && c <= '\u0008') ||
				(c >= '\u000E' && c <= '\u001B') ||
				(c >= '\u007F' && c <= '\u0084') ||
				(c >= '\u0086' && c <= '\u009F') ||
				c == '\u00AD' ||
				c == '\u070F' ||
				(c >= '\u200B' && c <= '\u200D') ||
				(c >= '\u2060' && c <= '\u2063') ||
				(c >= '\u206A' && c <= '\u206F') ||
				c == '\uFEFF')
				return BidiCharacterType.BN;
			if (c == '\u0009' ||
				c == '\u000B' ||
				c == '\u001F')
				return BidiCharacterType.S;
			if (c == '\u000A' ||
				c == '\u000D' ||
				(c >= '\u001C' && c <= '\u001E') ||
				c == '\u0085' ||
				c == '\u2029')
				return BidiCharacterType.B;
			if (c == '\u000C' ||
				c == '\u0020' ||
				c == '\u1680' ||
				c == '\u180E' ||
				(c >= '\u2000' && c <= '\u200A') ||
				c == '\u2028' ||
				c == '\u205F' ||
				c == '\u3000')
				return BidiCharacterType.WS;
			if ((c >= '\u0021' && c <= '\u0022') ||
				(c >= '\u0026' && c <= '\u002A') ||
				(c >= '\u003B' && c <= '\u0040') ||
				(c >= '\u005B' && c <= '\u0060') ||
				(c >= '\u007B' && c <= '\u007E') ||
				c == '\u00A1' ||
				(c >= '\u00A6' && c <= '\u00A9') ||
				(c >= '\u00AB' && c <= '\u00AC') ||
				(c >= '\u00AE' && c <= '\u00AF') ||
				c == '\u00B4' ||
				(c >= '\u00B6' && c <= '\u00B8') ||
				(c >= '\u00BB' && c <= '\u00BF') ||
				c == '\u00D7' ||
				c == '\u00F7' ||
				(c >= '\u02B9' && c <= '\u02BA') ||
				(c >= '\u02C2' && c <= '\u02CF') ||
				(c >= '\u02D2' && c <= '\u02DF') ||
				(c >= '\u02E5' && c <= '\u02ED') ||
				(c >= '\u02EF' && c <= '\u02FF') ||
				(c >= '\u0374' && c <= '\u0375') ||
				c == '\u037E' ||
				(c >= '\u0384' && c <= '\u0385') ||
				c == '\u0387' ||
				c == '\u03F6' ||
				c == '\u058A' ||
				(c >= '\u060E' && c <= '\u060F') ||
				c == '\u06E9' ||
				(c >= '\u07F6' && c <= '\u07F9') ||
				(c >= '\u0BF3' && c <= '\u0BF8') ||
				c == '\u0BFA' ||
				(c >= '\u0CF1' && c <= '\u0CF2') ||
				(c >= '\u0F3A' && c <= '\u0F3D') ||
				(c >= '\u1390' && c <= '\u1399') ||
				(c >= '\u169B' && c <= '\u169C') ||
				(c >= '\u17F0' && c <= '\u17F9') ||
				(c >= '\u1800' && c <= '\u180A') ||
				c == '\u1940' ||
				(c >= '\u1944' && c <= '\u1945') ||
				(c >= '\u19DE' && c <= '\u19FF') ||
				c == '\u1FBD' ||
				(c >= '\u1FBF' && c <= '\u1FC1') ||
				(c >= '\u1FCD' && c <= '\u1FCF') ||
				(c >= '\u1FDD' && c <= '\u1FDF') ||
				(c >= '\u1FED' && c <= '\u1FEF') ||
				(c >= '\u1FFD' && c <= '\u1FFE') ||
				(c >= '\u2010' && c <= '\u2027') ||
				(c >= '\u2035' && c <= '\u2043') ||
				(c >= '\u2045' && c <= '\u205E') ||
				(c >= '\u207C' && c <= '\u207E') ||
				(c >= '\u208C' && c <= '\u208E') ||
				(c >= '\u2100' && c <= '\u2101') ||
				(c >= '\u2103' && c <= '\u2106') ||
				(c >= '\u2108' && c <= '\u2109') ||
				c == '\u2114' ||
				(c >= '\u2116' && c <= '\u2118') ||
				(c >= '\u211E' && c <= '\u2123') ||
				c == '\u2125' ||
				c == '\u2127' ||
				c == '\u2129' ||
				(c >= '\u213A' && c <= '\u213B') ||
				(c >= '\u2140' && c <= '\u2144') ||
				(c >= '\u214A' && c <= '\u214D') ||
				(c >= '\u2153' && c <= '\u215F') ||
				(c >= '\u2190' && c <= '\u2211') ||
				(c >= '\u2214' && c <= '\u2335') ||
				(c >= '\u237B' && c <= '\u2394') ||
				(c >= '\u2396' && c <= '\u23E7') ||
				(c >= '\u2400' && c <= '\u2426') ||
				(c >= '\u2440' && c <= '\u244A') ||
				(c >= '\u2460' && c <= '\u2487') ||
				(c >= '\u24EA' && c <= '\u269C') ||
				(c >= '\u26A0' && c <= '\u26AB') ||
				(c >= '\u26AD' && c <= '\u26B2') ||
				(c >= '\u2701' && c <= '\u2704') ||
				(c >= '\u2706' && c <= '\u2709') ||
				(c >= '\u270C' && c <= '\u2727') ||
				(c >= '\u2729' && c <= '\u274B') ||
				c == '\u274D' ||
				(c >= '\u274F' && c <= '\u2752') ||
				c == '\u2756' ||
				(c >= '\u2758' && c <= '\u275E') ||
				(c >= '\u2761' && c <= '\u2794') ||
				(c >= '\u2798' && c <= '\u27AF') ||
				(c >= '\u27B1' && c <= '\u27BE') ||
				(c >= '\u27C0' && c <= '\u27CA') ||
				(c >= '\u27D0' && c <= '\u27EB') ||
				(c >= '\u27F0' && c <= '\u27FF') ||
				(c >= '\u2900' && c <= '\u2B1A') ||
				(c >= '\u2B20' && c <= '\u2B23') ||
				(c >= '\u2CE5' && c <= '\u2CEA') ||
				(c >= '\u2CF9' && c <= '\u2CFF') ||
				(c >= '\u2E00' && c <= '\u2E17') ||
				(c >= '\u2E1C' && c <= '\u2E1D') ||
				(c >= '\u2E80' && c <= '\u2E99') ||
				(c >= '\u2E9B' && c <= '\u2EF3') ||
				(c >= '\u2F00' && c <= '\u2FD5') ||
				(c >= '\u2FF0' && c <= '\u2FFB') ||
				(c >= '\u3001' && c <= '\u3004') ||
				(c >= '\u3008' && c <= '\u3020') ||
				c == '\u3030' ||
				(c >= '\u3036' && c <= '\u3037') ||
				(c >= '\u303D' && c <= '\u303F') ||
				(c >= '\u309B' && c <= '\u309C') ||
				c == '\u30A0' ||
				c == '\u30FB' ||
				(c >= '\u31C0' && c <= '\u31CF') ||
				(c >= '\u321D' && c <= '\u321E') ||
				(c >= '\u3250' && c <= '\u325F') ||
				(c >= '\u327C' && c <= '\u327E') ||
				(c >= '\u32B1' && c <= '\u32BF') ||
				(c >= '\u32CC' && c <= '\u32CF') ||
				(c >= '\u3377' && c <= '\u337A') ||
				(c >= '\u33DE' && c <= '\u33DF') ||
				c == '\u33FF' ||
				(c >= '\u4DC0' && c <= '\u4DFF') ||
				(c >= '\uA490' && c <= '\uA4C6') ||
				(c >= '\uA700' && c <= '\uA71A') ||
				(c >= '\uA720' && c <= '\uA721') ||
				(c >= '\uA828' && c <= '\uA82B') ||
				(c >= '\uA874' && c <= '\uA877') ||
				(c >= '\uFD3E' && c <= '\uFD3F') ||
				c == '\uFDFD' ||
				(c >= '\uFE10' && c <= '\uFE19') ||
				(c >= '\uFE30' && c <= '\uFE4F') ||
				c == '\uFE51' ||
				c == '\uFE54' ||
				(c >= '\uFE56' && c <= '\uFE5E') ||
				(c >= '\uFE60' && c <= '\uFE61') ||
				(c >= '\uFE64' && c <= '\uFE66') ||
				c == '\uFE68' ||
				c == '\uFE6B' ||
				(c >= '\uFF01' && c <= '\uFF02') ||
				(c >= '\uFF06' && c <= '\uFF0A') ||
				(c >= '\uFF1B' && c <= '\uFF20') ||
				(c >= '\uFF3B' && c <= '\uFF40') ||
				(c >= '\uFF5B' && c <= '\uFF65') ||
				(c >= '\uFFE2' && c <= '\uFFE4') ||
				(c >= '\uFFE8' && c <= '\uFFEE') ||
				(c >= '\uFFF9' && c <= '\uFFFD'))
				return BidiCharacterType.ON;
			if ((c >= '\u0023' && c <= '\u0025') ||
				(c >= '\u00A2' && c <= '\u00A5') ||
				(c >= '\u00B0' && c <= '\u00B1') ||
				c == '\u066A' ||
				(c >= '\u09F2' && c <= '\u09F3') ||
				c == '\u0AF1' ||
				c == '\u0BF9' ||
				c == '\u0E3F' ||
				c == '\u17DB' ||
				(c >= '\u2030' && c <= '\u2034') ||
				(c >= '\u20A0' && c <= '\u20B5') ||
				c == '\u212E' ||
				c == '\u2213' ||
				c == '\uFE5F' ||
				(c >= '\uFE69' && c <= '\uFE6A') ||
				(c >= '\uFF03' && c <= '\uFF05') ||
				(c >= '\uFFE0' && c <= '\uFFE1') ||
				(c >= '\uFFE5' && c <= '\uFFE6'))
				return BidiCharacterType.ET;
			if (c == '\u002B' ||
				c == '\u002D' ||
				(c >= '\u207A' && c <= '\u207B') ||
				(c >= '\u208A' && c <= '\u208B') ||
				c == '\u2212' ||
				c == '\uFB29' ||
				(c >= '\uFE62' && c <= '\uFE63') ||
				c == '\uFF0B' ||
				c == '\uFF0D')
				return BidiCharacterType.ES;
			if (c == '\u002C' ||
				(c >= '\u002E' && c <= '\u002F') ||
				c == '\u003A' ||
				c == '\u00A0' ||
				c == '\u060C' ||
				c == '\u202F' ||
				c == '\u2044' ||
				c == '\uFE50' ||
				c == '\uFE52' ||
				c == '\uFE55' ||
				c == '\uFF0C' ||
				(c >= '\uFF0E' && c <= '\uFF0F') ||
				c == '\uFF1A')
				return BidiCharacterType.CS;
			if ((c >= '\u0030' && c <= '\u0039') ||
				(c >= '\u00B2' && c <= '\u00B3') ||
				c == '\u00B9' ||
				(c >= '\u06F0' && c <= '\u06F9') ||
				c == '\u2070' ||
				(c >= '\u2074' && c <= '\u2079') ||
				(c >= '\u2080' && c <= '\u2089') ||
				(c >= '\u2488' && c <= '\u249B') ||
				(c >= '\uFF10' && c <= '\uFF19'))
				return BidiCharacterType.EN;
			if ((c >= '\u0041' && c <= '\u005A') ||
				(c >= '\u0061' && c <= '\u007A') ||
				c == '\u00AA' ||
				c == '\u00B5' ||
				c == '\u00BA' ||
				(c >= '\u00C0' && c <= '\u00D6') ||
				(c >= '\u00D8' && c <= '\u00F6') ||
				(c >= '\u00F8' && c <= '\u02B8') ||
				(c >= '\u02BB' && c <= '\u02C1') ||
				(c >= '\u02D0' && c <= '\u02D1') ||
				(c >= '\u02E0' && c <= '\u02E4') ||
				c == '\u02EE' ||
				(c >= '\u037A' && c <= '\u037D') ||
				c == '\u0386' ||
				(c >= '\u0388' && c <= '\u038A') ||
				c == '\u038C' ||
				(c >= '\u038E' && c <= '\u03A1') ||
				(c >= '\u03A3' && c <= '\u03CE') ||
				(c >= '\u03D0' && c <= '\u03F5') ||
				(c >= '\u03F7' && c <= '\u0482') ||
				(c >= '\u048A' && c <= '\u0513') ||
				(c >= '\u0531' && c <= '\u0556') ||
				(c >= '\u0559' && c <= '\u055F') ||
				(c >= '\u0561' && c <= '\u0587') ||
				c == '\u0589' ||
				(c >= '\u0903' && c <= '\u0939') ||
				(c >= '\u093D' && c <= '\u0940') ||
				(c >= '\u0949' && c <= '\u094C') ||
				c == '\u0950' ||
				(c >= '\u0958' && c <= '\u0961') ||
				(c >= '\u0964' && c <= '\u0970') ||
				(c >= '\u097B' && c <= '\u097F') ||
				(c >= '\u0982' && c <= '\u0983') ||
				(c >= '\u0985' && c <= '\u098C') ||
				(c >= '\u098F' && c <= '\u0990') ||
				(c >= '\u0993' && c <= '\u09A8') ||
				(c >= '\u09AA' && c <= '\u09B0') ||
				c == '\u09B2' ||
				(c >= '\u09B6' && c <= '\u09B9') ||
				(c >= '\u09BD' && c <= '\u09C0') ||
				(c >= '\u09C7' && c <= '\u09C8') ||
				(c >= '\u09CB' && c <= '\u09CC') ||
				c == '\u09CE' ||
				c == '\u09D7' ||
				(c >= '\u09DC' && c <= '\u09DD') ||
				(c >= '\u09DF' && c <= '\u09E1') ||
				(c >= '\u09E6' && c <= '\u09F1') ||
				(c >= '\u09F4' && c <= '\u09FA') ||
				c == '\u0A03' ||
				(c >= '\u0A05' && c <= '\u0A0A') ||
				(c >= '\u0A0F' && c <= '\u0A10') ||
				(c >= '\u0A13' && c <= '\u0A28') ||
				(c >= '\u0A2A' && c <= '\u0A30') ||
				(c >= '\u0A32' && c <= '\u0A33') ||
				(c >= '\u0A35' && c <= '\u0A36') ||
				(c >= '\u0A38' && c <= '\u0A39') ||
				(c >= '\u0A3E' && c <= '\u0A40') ||
				(c >= '\u0A59' && c <= '\u0A5C') ||
				c == '\u0A5E' ||
				(c >= '\u0A66' && c <= '\u0A6F') ||
				(c >= '\u0A72' && c <= '\u0A74') ||
				c == '\u0A83' ||
				(c >= '\u0A85' && c <= '\u0A8D') ||
				(c >= '\u0A8F' && c <= '\u0A91') ||
				(c >= '\u0A93' && c <= '\u0AA8') ||
				(c >= '\u0AAA' && c <= '\u0AB0') ||
				(c >= '\u0AB2' && c <= '\u0AB3') ||
				(c >= '\u0AB5' && c <= '\u0AB9') ||
				(c >= '\u0ABD' && c <= '\u0AC0') ||
				c == '\u0AC9' ||
				(c >= '\u0ACB' && c <= '\u0ACC') ||
				c == '\u0AD0' ||
				(c >= '\u0AE0' && c <= '\u0AE1') ||
				(c >= '\u0AE6' && c <= '\u0AEF') ||
				(c >= '\u0B02' && c <= '\u0B03') ||
				(c >= '\u0B05' && c <= '\u0B0C') ||
				(c >= '\u0B0F' && c <= '\u0B10') ||
				(c >= '\u0B13' && c <= '\u0B28') ||
				(c >= '\u0B2A' && c <= '\u0B30') ||
				(c >= '\u0B32' && c <= '\u0B33') ||
				(c >= '\u0B35' && c <= '\u0B39') ||
				(c >= '\u0B3D' && c <= '\u0B3E') ||
				c == '\u0B40' ||
				(c >= '\u0B47' && c <= '\u0B48') ||
				(c >= '\u0B4B' && c <= '\u0B4C') ||
				c == '\u0B57' ||
				(c >= '\u0B5C' && c <= '\u0B5D') ||
				(c >= '\u0B5F' && c <= '\u0B61') ||
				(c >= '\u0B66' && c <= '\u0B71') ||
				c == '\u0B83' ||
				(c >= '\u0B85' && c <= '\u0B8A') ||
				(c >= '\u0B8E' && c <= '\u0B90') ||
				(c >= '\u0B92' && c <= '\u0B95') ||
				(c >= '\u0B99' && c <= '\u0B9A') ||
				c == '\u0B9C' ||
				(c >= '\u0B9E' && c <= '\u0B9F') ||
				(c >= '\u0BA3' && c <= '\u0BA4') ||
				(c >= '\u0BA8' && c <= '\u0BAA') ||
				(c >= '\u0BAE' && c <= '\u0BB9') ||
				(c >= '\u0BBE' && c <= '\u0BBF') ||
				(c >= '\u0BC1' && c <= '\u0BC2') ||
				(c >= '\u0BC6' && c <= '\u0BC8') ||
				(c >= '\u0BCA' && c <= '\u0BCC') ||
				c == '\u0BD7' ||
				(c >= '\u0BE6' && c <= '\u0BF2') ||
				(c >= '\u0C01' && c <= '\u0C03') ||
				(c >= '\u0C05' && c <= '\u0C0C') ||
				(c >= '\u0C0E' && c <= '\u0C10') ||
				(c >= '\u0C12' && c <= '\u0C28') ||
				(c >= '\u0C2A' && c <= '\u0C33') ||
				(c >= '\u0C35' && c <= '\u0C39') ||
				(c >= '\u0C41' && c <= '\u0C44') ||
				(c >= '\u0C60' && c <= '\u0C61') ||
				(c >= '\u0C66' && c <= '\u0C6F') ||
				(c >= '\u0C82' && c <= '\u0C83') ||
				(c >= '\u0C85' && c <= '\u0C8C') ||
				(c >= '\u0C8E' && c <= '\u0C90') ||
				(c >= '\u0C92' && c <= '\u0CA8') ||
				(c >= '\u0CAA' && c <= '\u0CB3') ||
				(c >= '\u0CB5' && c <= '\u0CB9') ||
				(c >= '\u0CBD' && c <= '\u0CC4') ||
				(c >= '\u0CC6' && c <= '\u0CC8') ||
				(c >= '\u0CCA' && c <= '\u0CCB') ||
				(c >= '\u0CD5' && c <= '\u0CD6') ||
				c == '\u0CDE' ||
				(c >= '\u0CE0' && c <= '\u0CE1') ||
				(c >= '\u0CE6' && c <= '\u0CEF') ||
				(c >= '\u0D02' && c <= '\u0D03') ||
				(c >= '\u0D05' && c <= '\u0D0C') ||
				(c >= '\u0D0E' && c <= '\u0D10') ||
				(c >= '\u0D12' && c <= '\u0D28') ||
				(c >= '\u0D2A' && c <= '\u0D39') ||
				(c >= '\u0D3E' && c <= '\u0D40') ||
				(c >= '\u0D46' && c <= '\u0D48') ||
				(c >= '\u0D4A' && c <= '\u0D4C') ||
				c == '\u0D57' ||
				(c >= '\u0D60' && c <= '\u0D61') ||
				(c >= '\u0D66' && c <= '\u0D6F') ||
				(c >= '\u0D82' && c <= '\u0D83') ||
				(c >= '\u0D85' && c <= '\u0D96') ||
				(c >= '\u0D9A' && c <= '\u0DB1') ||
				(c >= '\u0DB3' && c <= '\u0DBB') ||
				c == '\u0DBD' ||
				(c >= '\u0DC0' && c <= '\u0DC6') ||
				(c >= '\u0DCF' && c <= '\u0DD1') ||
				(c >= '\u0DD8' && c <= '\u0DDF') ||
				(c >= '\u0DF2' && c <= '\u0DF4') ||
				(c >= '\u0E01' && c <= '\u0E30') ||
				(c >= '\u0E32' && c <= '\u0E33') ||
				(c >= '\u0E40' && c <= '\u0E46') ||
				(c >= '\u0E4F' && c <= '\u0E5B') ||
				(c >= '\u0E81' && c <= '\u0E82') ||
				c == '\u0E84' ||
				(c >= '\u0E87' && c <= '\u0E88') ||
				c == '\u0E8A' ||
				c == '\u0E8D' ||
				(c >= '\u0E94' && c <= '\u0E97') ||
				(c >= '\u0E99' && c <= '\u0E9F') ||
				(c >= '\u0EA1' && c <= '\u0EA3') ||
				c == '\u0EA5' ||
				c == '\u0EA7' ||
				(c >= '\u0EAA' && c <= '\u0EAB') ||
				(c >= '\u0EAD' && c <= '\u0EB0') ||
				(c >= '\u0EB2' && c <= '\u0EB3') ||
				c == '\u0EBD' ||
				(c >= '\u0EC0' && c <= '\u0EC4') ||
				c == '\u0EC6' ||
				(c >= '\u0ED0' && c <= '\u0ED9') ||
				(c >= '\u0EDC' && c <= '\u0EDD') ||
				(c >= '\u0F00' && c <= '\u0F17') ||
				(c >= '\u0F1A' && c <= '\u0F34') ||
				c == '\u0F36' ||
				c == '\u0F38' ||
				(c >= '\u0F3E' && c <= '\u0F47') ||
				(c >= '\u0F49' && c <= '\u0F6A') ||
				c == '\u0F7F' ||
				c == '\u0F85' ||
				(c >= '\u0F88' && c <= '\u0F8B') ||
				(c >= '\u0FBE' && c <= '\u0FC5') ||
				(c >= '\u0FC7' && c <= '\u0FCC') ||
				(c >= '\u0FCF' && c <= '\u0FD1') ||
				(c >= '\u1000' && c <= '\u1021') ||
				(c >= '\u1023' && c <= '\u1027') ||
				(c >= '\u1029' && c <= '\u102A') ||
				c == '\u102C' ||
				c == '\u1031' ||
				c == '\u1038' ||
				(c >= '\u1040' && c <= '\u1057') ||
				(c >= '\u10A0' && c <= '\u10C5') ||
				(c >= '\u10D0' && c <= '\u10FC') ||
				(c >= '\u1100' && c <= '\u1159') ||
				(c >= '\u115F' && c <= '\u11A2') ||
				(c >= '\u11A8' && c <= '\u11F9') ||
				(c >= '\u1200' && c <= '\u1248') ||
				(c >= '\u124A' && c <= '\u124D') ||
				(c >= '\u1250' && c <= '\u1256') ||
				c == '\u1258' ||
				(c >= '\u125A' && c <= '\u125D') ||
				(c >= '\u1260' && c <= '\u1288') ||
				(c >= '\u128A' && c <= '\u128D') ||
				(c >= '\u1290' && c <= '\u12B0') ||
				(c >= '\u12B2' && c <= '\u12B5') ||
				(c >= '\u12B8' && c <= '\u12BE') ||
				c == '\u12C0' ||
				(c >= '\u12C2' && c <= '\u12C5') ||
				(c >= '\u12C8' && c <= '\u12D6') ||
				(c >= '\u12D8' && c <= '\u1310') ||
				(c >= '\u1312' && c <= '\u1315') ||
				(c >= '\u1318' && c <= '\u135A') ||
				(c >= '\u1360' && c <= '\u137C') ||
				(c >= '\u1380' && c <= '\u138F') ||
				(c >= '\u13A0' && c <= '\u13F4') ||
				(c >= '\u1401' && c <= '\u1676') ||
				(c >= '\u1681' && c <= '\u169A') ||
				(c >= '\u16A0' && c <= '\u16F0') ||
				(c >= '\u1700' && c <= '\u170C') ||
				(c >= '\u170E' && c <= '\u1711') ||
				(c >= '\u1720' && c <= '\u1731') ||
				(c >= '\u1735' && c <= '\u1736') ||
				(c >= '\u1740' && c <= '\u1751') ||
				(c >= '\u1760' && c <= '\u176C') ||
				(c >= '\u176E' && c <= '\u1770') ||
				(c >= '\u1780' && c <= '\u17B6') ||
				(c >= '\u17BE' && c <= '\u17C5') ||
				(c >= '\u17C7' && c <= '\u17C8') ||
				(c >= '\u17D4' && c <= '\u17DA') ||
				c == '\u17DC' ||
				(c >= '\u17E0' && c <= '\u17E9') ||
				(c >= '\u1810' && c <= '\u1819') ||
				(c >= '\u1820' && c <= '\u1877') ||
				(c >= '\u1880' && c <= '\u18A8') ||
				(c >= '\u1900' && c <= '\u191C') ||
				(c >= '\u1923' && c <= '\u1926') ||
				(c >= '\u1930' && c <= '\u1931') ||
				(c >= '\u1933' && c <= '\u1938') ||
				(c >= '\u1946' && c <= '\u196D') ||
				(c >= '\u1970' && c <= '\u1974') ||
				(c >= '\u1980' && c <= '\u19A9') ||
				(c >= '\u19B0' && c <= '\u19C9') ||
				(c >= '\u19D0' && c <= '\u19D9') ||
				(c >= '\u1A00' && c <= '\u1A16') ||
				(c >= '\u1A19' && c <= '\u1A1B') ||
				(c >= '\u1A1E' && c <= '\u1A1F') ||
				(c >= '\u1B04' && c <= '\u1B33') ||
				c == '\u1B35' ||
				c == '\u1B3B' ||
				(c >= '\u1B3D' && c <= '\u1B41') ||
				(c >= '\u1B43' && c <= '\u1B4B') ||
				(c >= '\u1B50' && c <= '\u1B6A') ||
				(c >= '\u1B74' && c <= '\u1B7C') ||
				(c >= '\u1D00' && c <= '\u1DBF') ||
				(c >= '\u1E00' && c <= '\u1E9B') ||
				(c >= '\u1EA0' && c <= '\u1EF9') ||
				(c >= '\u1F00' && c <= '\u1F15') ||
				(c >= '\u1F18' && c <= '\u1F1D') ||
				(c >= '\u1F20' && c <= '\u1F45') ||
				(c >= '\u1F48' && c <= '\u1F4D') ||
				(c >= '\u1F50' && c <= '\u1F57') ||
				c == '\u1F59' ||
				c == '\u1F5B' ||
				c == '\u1F5D' ||
				(c >= '\u1F5F' && c <= '\u1F7D') ||
				(c >= '\u1F80' && c <= '\u1FB4') ||
				(c >= '\u1FB6' && c <= '\u1FBC') ||
				c == '\u1FBE' ||
				(c >= '\u1FC2' && c <= '\u1FC4') ||
				(c >= '\u1FC6' && c <= '\u1FCC') ||
				(c >= '\u1FD0' && c <= '\u1FD3') ||
				(c >= '\u1FD6' && c <= '\u1FDB') ||
				(c >= '\u1FE0' && c <= '\u1FEC') ||
				(c >= '\u1FF2' && c <= '\u1FF4') ||
				(c >= '\u1FF6' && c <= '\u1FFC') ||
				c == '\u200E' ||
				c == '\u2071' ||
				c == '\u207F' ||
				(c >= '\u2090' && c <= '\u2094') ||
				c == '\u2102' ||
				c == '\u2107' ||
				(c >= '\u210A' && c <= '\u2113') ||
				c == '\u2115' ||
				(c >= '\u2119' && c <= '\u211D') ||
				c == '\u2124' ||
				c == '\u2126' ||
				c == '\u2128' ||
				(c >= '\u212A' && c <= '\u212D') ||
				(c >= '\u212F' && c <= '\u2139') ||
				(c >= '\u213C' && c <= '\u213F') ||
				(c >= '\u2145' && c <= '\u2149') ||
				c == '\u214E' ||
				(c >= '\u2160' && c <= '\u2184') ||
				(c >= '\u2336' && c <= '\u237A') ||
				c == '\u2395' ||
				(c >= '\u249C' && c <= '\u24E9') ||
				c == '\u26AC' ||
				(c >= '\u2800' && c <= '\u28FF') ||
				(c >= '\u2C00' && c <= '\u2C2E') ||
				(c >= '\u2C30' && c <= '\u2C5E') ||
				(c >= '\u2C60' && c <= '\u2C6C') ||
				(c >= '\u2C74' && c <= '\u2C77') ||
				(c >= '\u2C80' && c <= '\u2CE4') ||
				(c >= '\u2D00' && c <= '\u2D25') ||
				(c >= '\u2D30' && c <= '\u2D65') ||
				c == '\u2D6F' ||
				(c >= '\u2D80' && c <= '\u2D96') ||
				(c >= '\u2DA0' && c <= '\u2DA6') ||
				(c >= '\u2DA8' && c <= '\u2DAE') ||
				(c >= '\u2DB0' && c <= '\u2DB6') ||
				(c >= '\u2DB8' && c <= '\u2DBE') ||
				(c >= '\u2DC0' && c <= '\u2DC6') ||
				(c >= '\u2DC8' && c <= '\u2DCE') ||
				(c >= '\u2DD0' && c <= '\u2DD6') ||
				(c >= '\u2DD8' && c <= '\u2DDE') ||
				(c >= '\u3005' && c <= '\u3007') ||
				(c >= '\u3021' && c <= '\u3029') ||
				(c >= '\u3031' && c <= '\u3035') ||
				(c >= '\u3038' && c <= '\u303C') ||
				(c >= '\u3041' && c <= '\u3096') ||
				(c >= '\u309D' && c <= '\u309F') ||
				(c >= '\u30A1' && c <= '\u30FA') ||
				(c >= '\u30FC' && c <= '\u30FF') ||
				(c >= '\u3105' && c <= '\u312C') ||
				(c >= '\u3131' && c <= '\u318E') ||
				(c >= '\u3190' && c <= '\u31B7') ||
				(c >= '\u31F0' && c <= '\u321C') ||
				(c >= '\u3220' && c <= '\u3243') ||
				(c >= '\u3260' && c <= '\u327B') ||
				(c >= '\u327F' && c <= '\u32B0') ||
				(c >= '\u32C0' && c <= '\u32CB') ||
				(c >= '\u32D0' && c <= '\u32FE') ||
				(c >= '\u3300' && c <= '\u3376') ||
				(c >= '\u337B' && c <= '\u33DD') ||
				(c >= '\u33E0' && c <= '\u33FE') ||
				c == '\u3400' ||
				c == '\u4DB5' ||
				c == '\u4E00' ||
				c == '\u9FBB' ||
				(c >= '\uA000' && c <= '\uA48C') ||
				(c >= '\uA800' && c <= '\uA801') ||
				(c >= '\uA803' && c <= '\uA805') ||
				(c >= '\uA807' && c <= '\uA80A') ||
				(c >= '\uA80C' && c <= '\uA824') ||
				c == '\uA827' ||
				(c >= '\uA840' && c <= '\uA873') ||
				c == '\uAC00' ||
				c == '\uD7A3' ||
				c == '\uD800' ||
				(c >= '\uDB7F' && c <= '\uDB80') ||
				(c >= '\uDBFF' && c <= '\uDC00') ||
				(c >= '\uDFFF' && c <= '\uE000') ||
				(c >= '\uF8FF' && c <= '\uFA2D') ||
				(c >= '\uFA30' && c <= '\uFA6A') ||
				(c >= '\uFA70' && c <= '\uFAD9') ||
				(c >= '\uFB00' && c <= '\uFB06') ||
				(c >= '\uFB13' && c <= '\uFB17') ||
				(c >= '\uFF21' && c <= '\uFF3A') ||
				(c >= '\uFF41' && c <= '\uFF5A') ||
				(c >= '\uFF66' && c <= '\uFFBE') ||
				(c >= '\uFFC2' && c <= '\uFFC7') ||
				(c >= '\uFFCA' && c <= '\uFFCF') ||
				(c >= '\uFFD2' && c <= '\uFFD7') ||
				(c >= '\uFFDA' && c <= '\uFFDC'))
				return BidiCharacterType.L;
			if ((c >= '\u0300' && c <= '\u036F') ||
				(c >= '\u0483' && c <= '\u0486') ||
				(c >= '\u0488' && c <= '\u0489') ||
				(c >= '\u0591' && c <= '\u05BD') ||
				c == '\u05BF' ||
				(c >= '\u05C1' && c <= '\u05C2') ||
				(c >= '\u05C4' && c <= '\u05C5') ||
				c == '\u05C7' ||
				(c >= '\u0610' && c <= '\u0615') ||
				(c >= '\u064B' && c <= '\u065E') ||
				c == '\u0670' ||
				(c >= '\u06D6' && c <= '\u06DC') ||
				(c >= '\u06DE' && c <= '\u06E4') ||
				(c >= '\u06E7' && c <= '\u06E8') ||
				(c >= '\u06EA' && c <= '\u06ED') ||
				c == '\u0711' ||
				(c >= '\u0730' && c <= '\u074A') ||
				(c >= '\u07A6' && c <= '\u07B0') ||
				(c >= '\u07EB' && c <= '\u07F3') ||
				(c >= '\u0901' && c <= '\u0902') ||
				c == '\u093C' ||
				(c >= '\u0941' && c <= '\u0948') ||
				c == '\u094D' ||
				(c >= '\u0951' && c <= '\u0954') ||
				(c >= '\u0962' && c <= '\u0963') ||
				c == '\u0981' ||
				c == '\u09BC' ||
				(c >= '\u09C1' && c <= '\u09C4') ||
				c == '\u09CD' ||
				(c >= '\u09E2' && c <= '\u09E3') ||
				(c >= '\u0A01' && c <= '\u0A02') ||
				c == '\u0A3C' ||
				(c >= '\u0A41' && c <= '\u0A42') ||
				(c >= '\u0A47' && c <= '\u0A48') ||
				(c >= '\u0A4B' && c <= '\u0A4D') ||
				(c >= '\u0A70' && c <= '\u0A71') ||
				(c >= '\u0A81' && c <= '\u0A82') ||
				c == '\u0ABC' ||
				(c >= '\u0AC1' && c <= '\u0AC5') ||
				(c >= '\u0AC7' && c <= '\u0AC8') ||
				c == '\u0ACD' ||
				(c >= '\u0AE2' && c <= '\u0AE3') ||
				c == '\u0B01' ||
				c == '\u0B3C' ||
				c == '\u0B3F' ||
				(c >= '\u0B41' && c <= '\u0B43') ||
				c == '\u0B4D' ||
				c == '\u0B56' ||
				c == '\u0B82' ||
				c == '\u0BC0' ||
				c == '\u0BCD' ||
				(c >= '\u0C3E' && c <= '\u0C40') ||
				(c >= '\u0C46' && c <= '\u0C48') ||
				(c >= '\u0C4A' && c <= '\u0C4D') ||
				(c >= '\u0C55' && c <= '\u0C56') ||
				c == '\u0CBC' ||
				(c >= '\u0CCC' && c <= '\u0CCD') ||
				(c >= '\u0CE2' && c <= '\u0CE3') ||
				(c >= '\u0D41' && c <= '\u0D43') ||
				c == '\u0D4D' ||
				c == '\u0DCA' ||
				(c >= '\u0DD2' && c <= '\u0DD4') ||
				c == '\u0DD6' ||
				c == '\u0E31' ||
				(c >= '\u0E34' && c <= '\u0E3A') ||
				(c >= '\u0E47' && c <= '\u0E4E') ||
				c == '\u0EB1' ||
				(c >= '\u0EB4' && c <= '\u0EB9') ||
				(c >= '\u0EBB' && c <= '\u0EBC') ||
				(c >= '\u0EC8' && c <= '\u0ECD') ||
				(c >= '\u0F18' && c <= '\u0F19') ||
				c == '\u0F35' ||
				c == '\u0F37' ||
				c == '\u0F39' ||
				(c >= '\u0F71' && c <= '\u0F7E') ||
				(c >= '\u0F80' && c <= '\u0F84') ||
				(c >= '\u0F86' && c <= '\u0F87') ||
				(c >= '\u0F90' && c <= '\u0F97') ||
				(c >= '\u0F99' && c <= '\u0FBC') ||
				c == '\u0FC6' ||
				(c >= '\u102D' && c <= '\u1030') ||
				c == '\u1032' ||
				(c >= '\u1036' && c <= '\u1037') ||
				c == '\u1039' ||
				(c >= '\u1058' && c <= '\u1059') ||
				c == '\u135F' ||
				(c >= '\u1712' && c <= '\u1714') ||
				(c >= '\u1732' && c <= '\u1734') ||
				(c >= '\u1752' && c <= '\u1753') ||
				(c >= '\u1772' && c <= '\u1773') ||
				(c >= '\u17B7' && c <= '\u17BD') ||
				c == '\u17C6' ||
				(c >= '\u17C9' && c <= '\u17D3') ||
				c == '\u17DD' ||
				(c >= '\u180B' && c <= '\u180D') ||
				c == '\u18A9' ||
				(c >= '\u1920' && c <= '\u1922') ||
				(c >= '\u1927' && c <= '\u192B') ||
				c == '\u1932' ||
				(c >= '\u1939' && c <= '\u193B') ||
				(c >= '\u1A17' && c <= '\u1A18') ||
				(c >= '\u1B00' && c <= '\u1B03') ||
				c == '\u1B34' ||
				(c >= '\u1B36' && c <= '\u1B3A') ||
				c == '\u1B3C' ||
				c == '\u1B42' ||
				(c >= '\u1B6B' && c <= '\u1B73') ||
				(c >= '\u1DC0' && c <= '\u1DCA') ||
				(c >= '\u1DFE' && c <= '\u1DFF') ||
				(c >= '\u20D0' && c <= '\u20EF') ||
				(c >= '\u302A' && c <= '\u302F') ||
				(c >= '\u3099' && c <= '\u309A') ||
				c == '\uA802' ||
				c == '\uA806' ||
				c == '\uA80B' ||
				(c >= '\uA825' && c <= '\uA826') ||
				c == '\uFB1E' ||
				(c >= '\uFE00' && c <= '\uFE0F') ||
				(c >= '\uFE20' && c <= '\uFE23'))
				return BidiCharacterType.NSM;
			if (c == '\u05BE' ||
				c == '\u05C0' ||
				c == '\u05C3' ||
				c == '\u05C6' ||
				(c >= '\u05D0' && c <= '\u05EA') ||
				(c >= '\u05F0' && c <= '\u05F4') ||
				(c >= '\u07C0' && c <= '\u07EA') ||
				(c >= '\u07F4' && c <= '\u07F5') ||
				c == '\u07FA' ||
				c == '\u200F' ||
				c == '\uFB1D' ||
				(c >= '\uFB1F' && c <= '\uFB28') ||
				(c >= '\uFB2A' && c <= '\uFB36') ||
				(c >= '\uFB38' && c <= '\uFB3C') ||
				c == '\uFB3E' ||
				(c >= '\uFB40' && c <= '\uFB41') ||
				(c >= '\uFB43' && c <= '\uFB44') ||
				(c >= '\uFB46' && c <= '\uFB4F'))
				return BidiCharacterType.R;
			if ((c >= '\u0600' && c <= '\u0603') ||
				c == '\u060B' ||
				c == '\u060D' ||
				c == '\u061B' ||
				(c >= '\u061E' && c <= '\u061F') ||
				(c >= '\u0621' && c <= '\u063A') ||
				(c >= '\u0640' && c <= '\u064A') ||
				(c >= '\u066D' && c <= '\u066F') ||
				(c >= '\u0671' && c <= '\u06D5') ||
				c == '\u06DD' ||
				(c >= '\u06E5' && c <= '\u06E6') ||
				(c >= '\u06EE' && c <= '\u06EF') ||
				(c >= '\u06FA' && c <= '\u070D') ||
				c == '\u0710' ||
				(c >= '\u0712' && c <= '\u072F') ||
				(c >= '\u074D' && c <= '\u076D') ||
				(c >= '\u0780' && c <= '\u07A5') ||
				c == '\u07B1' ||
				(c >= '\uFB50' && c <= '\uFBB1') ||
				(c >= '\uFBD3' && c <= '\uFD3D') ||
				(c >= '\uFD50' && c <= '\uFD8F') ||
				(c >= '\uFD92' && c <= '\uFDC7') ||
				(c >= '\uFDF0' && c <= '\uFDFC') ||
				(c >= '\uFE70' && c <= '\uFE74') ||
				(c >= '\uFE76' && c <= '\uFEFC'))
				return BidiCharacterType.AL;
			if ((c >= '\u0660' && c <= '\u0669') ||
				(c >= '\u066B' && c <= '\u066C'))
				return BidiCharacterType.AN;
			if (c == '\u202A') return BidiCharacterType.LRE;
			if (c == '\u202B') return BidiCharacterType.RLE;
			if (c == '\u202C') return BidiCharacterType.PDF;
			if (c == '\u202D') return BidiCharacterType.LRO;
			if (c == '\u202E') return BidiCharacterType.RLO;
			return BidiCharacterType.L;
		}
	}
}
